Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Παραβίαση συγχρονισμού: το UpdateCommand επηρέασε 0 από τις αναμενόμενες 1 εγγραφές.

Îåêßíçóå áðü ôï ìÝëïò g1024. Τελευταία δημοσίευση από το μέλος g1024 στις 28-02-2011, 10:45. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-02-2011, 13:14 63793

    Παραβίαση συγχρονισμού: το UpdateCommand επηρέασε 0 από τις αναμενόμενες 1 εγγραφές.

    Καλημέρα σας.
    Έχω μία φόρμα με ένα Datagrid όπου εμφανίζω ένα πελατολόγιο , κάνοντας κλικ σε μία εγγραφή ανοίγω μία νέα φόρμα για editing της εγγραφής.
    Το πρόβλημα έρχεται όταν κάνω update το Dataset μου πατάει ένα μήνυμα  Παραβίαση συγχρονισμού: το UpdateCommand επηρέασε 0 από τις αναμενόμενες 1 εγγραφές.
    (Νομίζω ότι το πρόβλημα μου είναι ότι κάνω Fill 2 φορές το Dataset μια στην 1η Φόρμα και μία στην 2η φόρμα)
    Πώς πρέπει να το χειριστώ ;
    Ευχαριστώ εκ' των προτέρων.

  •  27-02-2011, 21:20 63812 σε απάντηση της 63793

    Απ: Παραβίαση συγχρονισμού: το UpdateCommand επηρέασε 0 από τις αναμενόμενες 1 εγγραφές.

    Είχα και εγώ αυτό το μύνημα λάθους. Μου το έβγαζε όταν πήγαινα να κάνω update μία εγγραφή στην βάση που είτε δεν υπήρχε πιά (είχε σβηστεί), είτε έιχε αλλαχτεί ή απλά άλλαζα την τιμή του primary key κατά λάθος. Τα dataset έχουν "μέσα" τους και τις original εγγραφές που έχουν τραβήξει από την βάση. Όταν ένας χρήστης τραβάει τις εγγραφές και τις αλλάζει, πριν το update, o adapter συγκρίνει πρώτα την original (αρχική εγγραφή) με την εγγραφή που έχει στην βάση. Αν διαπιστώσει το ADO ότι η original εγγραφή (σε οποιαδήποτε κολώνα) δεν είναι ίδια με την αντίστοιχη κολώνα στην βάση βγάζει αυτό το μύνημα λάθους. Δεν νομίζω να φταίει το ότι κάνετε 2 φορές Fill τα δεδομένα. Και εγώ αυτό κάνω απλά όταν ο χρήστης θέλει να διορθώσει τα δεδομένα ξαναδιαβάζω τις εγγραφές από την βάση και τις δείχνω στην φόρμα της διαχείρισης. Αυτά εξαρτώνται και από το τι έιδους Concurrency Control έχετε. Νομίζω το default είναι Optimistic.

    Link1

    Link2

  •  28-02-2011, 09:24 63821 σε απάντηση της 63812

    Απ: Παραβίαση συγχρονισμού: το UpdateCommand επηρέασε 0 από τις αναμενόμενες 1 εγγραφές.

    Σε ευχαριστώ για την απάντηση σου.

    Λίγο που το έψαξα , είδα ότι η βάση δεδομένων αντιγράφεται αυτόματα στο φάκελο debug και επειδή αυτό είχε σαν αποτέλεσμα , να χάνω τα δεδομένα που έβαζα  ,αποφάσισα να πω στο VS να μην κάνει καθόλου αντιγραφεί την βάση στο Debug.Αργότερα έκανα αλλαγές  στην original με αποτέλεσμα το πρόβλημα που περιέγραψα.

    Άρα αυτό επιβεβαιώνει αυτό μου έγραψες.

    Σ’ ευχαριστώ για το χρόνο σου.

     

  •  28-02-2011, 10:35 63825 σε απάντηση της 63821

    Απ: Παραβίαση συγχρονισμού: το UpdateCommand επηρέασε 0 από τις αναμενόμενες 1 εγγραφές.

    Ωστόσο, θα πρέπει να κατανοήσεις τον μηχανισμό και να διορθώσεις την αιτία που συμβαίνει το λάθος. Η αιτία είναι ότι στο ADO.NET το data access γίνεται με disconnected τρόπο, δηλαδή αφού πάρεις τα data σου στον client, κλείνει η σύνδεση και δεν τα κλειδώνεις στον server με αποτέλεσμα οι επόμενοι χρήστες να μπορούν να τα αλλάξουν ή να τα διαγράψουν κι όταν έρθει η ώρα σου να κάνεις ενημερώσεις να μην υπάρχουν πλέον, οπότε να έχεις exceptions. Θα πρέπει στον κώδικά σου όταν κάνεις το update να χειρίζεσαι τις καταστάσεις όπου:

    • προσπαθείς να αλλάξεις μια εγγραφή που πλέον δεν υπάρχει στον server γιατί τη διέγραψε κάποιος άλλος χρήστης
    • προσπαθείς να διαγράψεις μια εγγραφή που έχει ήδη διαγραφεί από κάποιον άλλον χρήστη
    • προσπαθείς να αλλάξεις μια εγγραφή που έχει ήδη αλλάξει από κάποιον άλλον χρήστη

    Αυτά τα προβλήματα σίγουρα θα εμφανιστούν όταν η εφαρμογή σου τρέξει με πολλαπλούς χρήστες ωστόσο μπορεί να εμφανιστούν ακόμα και με έναν χρήστη αν γίνει αρκετά περίπλοκη, με πολλαπλές φόρμες που να δείχνουν τα ίδια data. To να επιλέξεις να *μην* ασχοληθείς με την διαχείριση αυτών των καταστάσεων είναι απλά σαν να σκουπίζεις και να βάζεις τα σκουπίδια κάτω από το χαλί.

     


    Vir prudens non contra ventum mingit
  •  28-02-2011, 10:45 63828 σε απάντηση της 63825

    Απ: Παραβίαση συγχρονισμού: το UpdateCommand επηρέασε 0 από τις αναμενόμενες 1 εγγραφές.

    Σ' ευχαριστώ για την πολύτιμη συμβουλή σου.

    Πάλι καλά που είμαι στην αρχή ακόμα!

     

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems